/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-11-14 下午1:21 Created by dwzhang
 */
package com.jade.modules.protocol;

import java.util.List;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 协议管理器。管理各类协议接入的参数和通道。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-11-14 下午1:21
 */
public interface ProtocolManager
{
    /**
     * 新增协议通道。
     *
     * @param channel 通道信息
     * @throws ProtocolException 处理异常
     */
    public void addChannel(ProtocolChannel channel)
        throws ProtocolException;

    /**
     * 更新协议通道信息。
     *
     * @param channel 通道信息
     * @throws ProtocolException 处理异常
     */
    public void updateChannel(ProtocolChannel channel)
            throws ProtocolException;

    /**
     * 删除协议通道。
     *
     * @param ids 通道标识
     * @throws ProtocolException 处理异常
     */
    public void removeChannel(int ...ids)
            throws ProtocolException;

    /**
     * 根据ID获取协议通道信息。
     *
     * @param id 协议标识
     * @return 通道信息
     */
    public ProtocolChannel getChannel(int id);

    /**
     * 分页查询通道信息。
     *
     * @param type 协议类型
     * @param criteria 查询条件
     * @return 通道列表
     */
    public PagingList<ProtocolChannel> queryChannel(String type, Criteria criteria);

    /**
     * 查询通道信息。
     *
     * @param type 协议类型
     * @param criteria 查询条件
     * @return 通道列表
     */
    public List<ProtocolChannel> listChannel(String type, Criteria criteria);

    /**
     * 选择一个能用的协议通道。
     *
     * @param type 协议类型
     * @return 协议通道
     */
    public ProtocolChannel selectChannel(String type);

    /**
     * 获取具体一个协议的所有参数列表。
     *
     * @param type 协议类型
     * @param protocol 协议
     * @return 参数列表。
     */
    public List<ProtocolParameter> getParameters(String type, String protocol);
}
